<?php

 /**Модуль список
  * @author  Холодий Андрей
  * @version 1.1
  * @copyright Copyright 2003, РБК СОФТ
  * @package List
  */

class content_list extends module {

 /**Путь к шаблону
  * @access public
  * @var string
  */
  var $path_tmpl;

 /**Шаблон
  * @access public
  * @var object
  */
  var $tmpl;

  /**Инициализация модуля.
   * @return mixed
   */
  function content_init() {
  	
    global $common_data_server;
    $this -> tmpl = new vlibTemplate();
    $this -> path_tmpl = "{$common_data_server}module_templates/content_list/{$this -> view_param['template']}/";
    
    switch ($this -> view_param['view_mode']) {
    	case "short_list"    :  $filename = 'content_list_short'; break;
    	case "full_list"     :  $filename = 'content_list_full'; break;
    	case "one_full_list" :  $filename = 'content_list_full_one'; break;
    	default              :  $filename = 'content_list_short'; 
    }
	if ($this -> q_param['id']) $filename = 'content_list_short_item';

    $fileTMPL = "{$this -> path_tmpl}{$filename}.vtmpl";
    
    if (!file_exists($fileTMPL)) {
    	$this -> body = "Шаблон отсутствует: $fileTMPL";
    	return false;
    }

	$this -> tmpl -> newTemplate($fileTMPL);

	// Элемент списка выводится отдельно
	if ($this -> q_param['id']) $this -> modeItem();

	// Список элементов
	else 						$this -> modeList();
	
	if( $this -> is_print == 1 ) $this -> tmpl -> setVar('is_print', 1);
 	elseif( $this -> view_param['is_printable'] == 'yes' )
		$this -> tmpl -> setVar('printable_url', 'printable.php?' . make_query_string(array('print' => 1)));

	$this -> body = $this -> tmpl -> grab();
  }

  /**Элемент списка
   * @return void
   */
  function modeItem() {

	$listArr = sql_select($this -> getSQL());
	
	if ($this -> view_param['numbering'] == 'show') $listArr[0]['ID'] = intval($this -> q_param['i']);
	$this -> title = $listArr[0]['TITLE'];

    $this -> tmpl -> setLoop('CONTENT_LIST', $listArr);
  }
  
  /**Список элементов
   * @return void
   */
  function modeList() {

	$list = sql_select("select COUNT(*) as COUNT_LIST
						from 
							CONTENT_LIST CL, 
							CONTENT_MAP CM 
						where 
							CM.INF_BLOCK_ID = {$this -> block_id} and
							CM.CONTENT_ID = CL.CONTENT_ID and
							CL.LANG_ID = {$this -> lang_id} and
							CL.VERSION = {$this -> version}");
	
	$from = -1; // CONTENT_ID первого элемента списка
	$id = 1;	// порядковый номер в списке

	//навигация 
	if ($list[0]['COUNT_LIST'] > $this -> view_param['num_per_page'] && 
		$this -> view_param['view_mode'] != 'one_full_list' && 
		!$this -> is_print &&
		$this -> view_param['num_per_page'] > 0) {

		if ($this -> q_param['from']) {
			$from = (intval($this -> q_param['from']) - 1)*$this -> view_param['num_per_page'];
			$id = $from + 1;
		} else $from = 0;

		$this -> tmpl -> setVar('NAVIGATION', page_navigation(
								$this -> view_param['num_per_page'], 
								$list[0]['COUNT_LIST'],
								"from{$this -> tarea_id}",
								"{$this -> path_tmpl}page_navigation.vtmpl")
							   );
		
	}

	// Выбираются только те CONTENT_ID, которые должны выводиться на текущей странице
	if ($from >= 0) $limitInSQL = " limit $from, {$this -> view_param['num_per_page']}";
	
	$listArr = sql_select($this -> getSQL($limitInSQL));
	
	for ($i = 0; $i < count($listArr); $i++) {
		if ($this -> view_param['numbering'] == 'show') $listArr[$i]['ID'] = $id;
		if ($this -> view_param['view_mode'] != 'one_full_list') 
			$listArr[$i]['URL'] = make_query_string(array("id{$this -> tarea_id}" => $listArr[$i]['CONTENT_ID'], 
														  "i{$this -> tarea_id}"  => $id));
		else 
			$listArr[$i]['URL'] = "{$this -> tarea_id}=".$listArr[$i]['CONTENT_ID'];
		$id++;
	}

    $this -> tmpl -> setLoop('CONTENT_LIST', $listArr);
  }

  /**Возвращает SQL-запрос к БД
   * @return string
   */
  function getSQL($limitInSQL = '') {
	
	$forItemSQL = ($this -> q_param['id'] ? "CL.CONTENT_ID = '".intval($this -> q_param['id'])."' and" : '');

	$sSQL = "
		select *  
		from 
			CONTENT_MAP CM, 
			CONTENT_LIST CL 
		where 
			CM.INF_BLOCK_ID = {$this -> block_id} and 
			CL.CONTENT_ID = CM.CONTENT_ID and
			$forItemSQL
		    CL.VERSION = {$this -> version} and
		    CL.LANG_ID = {$this -> lang_id}
		order by CL.LIST_ORDER ".($this->view_param["sort"]=="desc" ? "DESC" : "")."
		$limitInSQL";
  	
  	return $sSQL;
  }

}?>